//
//  GZLogDefines.h
//  GZLogger
//
//  Created by GR on 2018/12/20.
//  Copyright © 2018 GR. All rights reserved.
//

#import "GZLogLevel.h"
#import "GZLogItem.h"
#import "GZLogger.h"
#import "GZLogManager.h"

#define GZLog(Level, Tag, StackLevel, Format, ...)    \
do {    \
[[GZLogManager sharedInstance] \
recordWithLevel:Level \
tag:@#Tag \
file:@(__FILE__) \
function:@(__FUNCTION__) \
line:__LINE__ \
content:[NSString stringWithFormat:Format, ##__VA_ARGS__] \
stackLevel:StackLevel \
dataFileName:nil]; \
} while(0)


// Verbose
#define GZLogV(tag, format, ...)                        GZLog(GZLogLevelVerbose, tag, 0, format, ##__VA_ARGS__)
// Info
#define GZLogI(tag, format, ...)                        GZLog(GZLogLevelInfo, tag, 0, format, ##__VA_ARGS__)
// Debug
#define GZLogD(tag, format, ...)                        GZLog(GZLogLevelDebug, tag, 0, format, ##__VA_ARGS__)
// Warning
#define GZLogW(tag, format, ...)                        GZLog(GZLogLevelWarning, tag, 0, format, ##__VA_ARGS__)
// Error
#define GZLogE(tag, format, ...)                        GZLog(GZLogLevelError, tag, 0, format, ##__VA_ARGS__)
// Fatal
#define GZLogF(tag, format, ...)                        GZLog(GZLogLevelFatal, tag, 0, format, ##__VA_ARGS__)


#define GZDataLog(Level, Tag, StackLevel, DataFileName, Format, ...)    \
do {    \
[[GZLogManager sharedInstance] \
recordWithLevel:Level \
tag:@#Tag \
file:@(__FILE__) \
function:@(__FUNCTION__) \
line:__LINE__ \
content:[NSString stringWithFormat:Format, ##__VA_ARGS__] \
stackLevel:StackLevel \
dataFileName:DataFileName]; \
} while(0)

// Verbose
#define GZDataLogV(tag, dataFileName,format, ...)                        GZDataLog(GZLogLevelVerbose, tag, 0, dataFileName,format, ##__VA_ARGS__)
// Info
#define GZDataLogI(tag, dataFileName,format, ...)                        GZDataLog(GZLogLevelInfo, tag, 0, dataFileName,format, ##__VA_ARGS__)
// Debug
#define GZDataLogD(tag, dataFileName,format, ...)                        GZDataLog(GZLogLevelDebug, tag, 0, dataFileName,format, ##__VA_ARGS__)
// Warning
#define GZDataLogW(tag, dataFileName,format, ...)                        GZDataLog(GZLogLevelWarning, tag, 0, dataFileName,format, ##__VA_ARGS__)
// Error
#define GZDataLogE(tag, dataFileName,format, ...)                        GZDataLog(GZLogLevelError, tag, 0, dataFileName,format, ##__VA_ARGS__)
// Fatal
#define GZDataLogF(tag, dataFileName,format, ...)                        GZDataLog(GZLogLevelFatal, tag, 0, dataFileName,format, ##__VA_ARGS__)
